use Distribution node#15822
Conversation
f669081 to
1cc82bd
Compare
cc8ad84 to
928601b
Compare
7429911 to
baa68af
Compare
4df8a96 to
4ffc8d5
Compare
|
@trask please have a look |
ac6a83f to
62c977d
Compare
|
@trask please have another look |
|
@trask please check again |
|
Blocked by #16087 |
|
Punted runtime telemetry related changes to unblock this PR by not needing #16087 Addressed in latest commit:
|
|
@trask hope it makes sense now 😄 |
…based instrumentation matching - Replace FAIL_ON_UNKNOWN_PROPERTIES with DeserializationProblemHandler that logs warnings for unknown distribution.javaagent properties - Revert isInstrumentationEnabled to single-loop order-based matching (first name wins), consistent with ConfigProperties behavior Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…ingle-arg overload - Initialize INSTANCE to null, throw on early access or double-init - Add isInstrumentationEnabled(String) overload using default enabled - Update comments to "Only used by tests" Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
During Gradle byteBuddyJava builds, InstrumentationModule subclasses are loaded which triggers AgentDistributionConfig.get() before set() is called. Instead of always throwing, return defaults when outside agent context. AgentInstaller calls expectInitialization() early in bootstrap so that get() still throws at runtime if set() was missed (catches ordering bugs). Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
38b661a to
b763bc5
Compare
…fig has no distribution node When declarative config is used but the YAML has no distribution.javaagent node, JavaagentDistributionAccessCustomizerProvider never calls set(). Add setIfAbsent() fallback in OpenTelemetryInstaller to handle this case. Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…efault config in customizer provider Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Environment.getProperty(key, List.class) does not reassemble indexed properties (e.g. enabled[0]=spring_web). Switch to Spring Boot's Binder API which handles both indexed and comma-separated list formats. Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
73bd849 to
17b2e9c
Compare
# Conflicts: # declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java
There was a problem hiding this comment.
Pull request overview
Updates declarative configuration to use the distribution node (e.g., distribution.javaagent.instrumentation) for enabling/disabling instrumentations, aligning javaagent and Spring starter behavior with the configuration model described in #15796.
Changes:
- Introduce
AgentDistributionConfigand wiring to readdistribution.javaagentfrom declarative config (or fall back toConfigPropertiesfor non-declarative config). - Migrate javaagent and Spring starter “default enabled / enabled / disabled” logic from legacy nodes to
distribution.*. - Update smoke tests, Spring starter tests, and add a dedicated javaagent distribution-config test suite + fixture YAML.
Reviewed changes
Copilot reviewed 33 out of 33 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| smoke-tests/src/test/resources/declarative-config.yaml | Switch smoke-test declarative config from legacy instrumentation node to distribution.javaagent.instrumentation. |
| smoke-tests/src/test/java/io/opentelemetry/smoketest/DeclarativeConfigurationSmokeTest.java | Update test comment to reflect default_enabled=false behavior. |
| javaagent-tooling/src/testDistributionConfig/resources/distribution-config.yaml | Add fixture YAML covering distribution.javaagent properties (indy, excludes, instrumentation lists). |
| javaagent-tooling/src/testDistributionConfig/java/io/opentelemetry/javaagent/extension/instrumentation/internal/AgentDistributionConfigTest.java | New tests asserting distribution.javaagent parsing and instrumentation enable/disable semantics. |
| javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java | Update tests to use AgentDistributionConfig instead of GlobalOpenTelemetry/declarative config bridge. |
| javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java | Reset AgentDistributionConfig in test lifecycle to avoid global state leakage across tests. |
| javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java | Reset AgentDistributionConfig in test lifecycle. |
| javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java | Reset AgentDistributionConfig in test lifecycle. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java | Use AgentDistributionConfig for module enable/disable decisions; remove legacy helper. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java | Source excluded classes from AgentDistributionConfig instead of declarative config API. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java | Source excluded classloaders from AgentDistributionConfig instead of declarative config API. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java | Replace declarative-config-based test toggle with a direct system property toggle. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/JavaagentDistributionAccessCustomizerProvider.java | New customizer provider that reads distribution.javaagent and initializes AgentDistributionConfig. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java | Remove legacy instrumentation_mode accessor tied to deprecated config shape. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java | Initialize AgentDistributionConfig from ConfigProperties for non-declarative config usage. |
| javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java | Use AgentDistributionConfig for force-synchronous-agent-listeners decision. |
| javaagent-tooling/build.gradle.kts | Add jackson-databind runtime dependency + add testDistributionConfig suite and wire into check. |
| javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/internal/AgentDistributionConfig.java | New internal holder for distribution.javaagent config (indy, excludes, instrumentation lists, defaults). |
| javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java | Drive defaults and indy enablement from AgentDistributionConfig instead of legacy declarative config nodes. |
| javaagent-extension-api/build.gradle.kts | Add compileOnly dependency for jackson annotations used by AgentDistributionConfig. |
| instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java | Update Spring starter declarative-config tests to use otel.distribution.spring_starter.instrumentation.*. |
| instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsAutoConfiguration.java | Remove legacy spring_starter instrumentation_mode parsing; rely on enablement condition + runtime_telemetry config. |
| instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsAutoConfiguration.java | Same as Java8 variant: remove legacy mode parsing and use new defaultEnabled boolean contract. |
| instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/EarlyConfig.java | Implement Spring starter distribution-based enable/disable (lists + default_enabled) with Binder list binding. |
| instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java | Change configure signature to accept boolean defaultEnabled instead of instrumentationMode string. |
| instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java | Pass distribution default enablement into runtime metrics config util. |
| instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java | Same signature change: boolean defaultEnabled. |
| instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java | Pass distribution default enablement into runtime metrics config util. |
| instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java | Switch enablement check to AgentDistributionConfig instead of declarative config + legacy mode. |
| declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java | Remove tests that depended on legacy agent/mode mapping behavior. |
| declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java | Remove tests for legacy agent prefix + instrumentation_mode string mapping. |
| declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java | Adjust node traversal to use get() instead of getStructured(..., empty()). |
| declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java | Remove special mappings for legacy agent/spring_starter instrumentation_mode and agent prefix translation. |
Fixes #15796